package com.ellwood.api.system.iController;

import com.ellwood.common.core.base.IControllerFactory;
import com.ellwood.common.core.result.ApiResult;
import com.ellwood.common.core.result.PageResult;
import com.ellwood.dataMapper.system.entity.UserEntity;
import com.ellwood.modules.system.domain.VO.user.UserEditVO;
import com.ellwood.modules.system.domain.VO.user.UserPageQueryVO;
import com.ellwood.modules.system.domain.VO.user.UserSaveVo;
import com.ellwood.modules.system.domain.dto.UserPageQueryDto;
import com.ellwood.modules.system.domain.dto.UserQueryDto;
import jakarta.validation.Valid;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @ProjectName: Ellwood-framework-boot
 * @PackageName: com.ellwood.api.system.iController
 * @ClassName: IUserController
 * @Description: // 用户控制器接口
 * @Author: Ellwood
 * @CreateDate: 2024/7/22 - 上午11:22
 * @Version: V1.0.0
 */
public interface IUserController extends IControllerFactory<UserEntity> {

    /**
     * 分页查询用户
     *
     * @param pageVo 分页查询参数
     * @return 返回分页结果
     */
    ApiResult<PageResult<UserPageQueryDto>> pageQuery(@ParameterObject @Valid UserPageQueryVO pageVo);

    /**
     * 查询所有用户
     *
     * @return 返回用户数据
     */
    ApiResult<List<UserQueryDto>> findAll();

    /***
     * 根据id查询用户
     * @param id 用户id
     * @return 返回查询结果
     */
    ApiResult<UserQueryDto> findById(Long id);

    /**
     * 逻辑删除
     *
     * @param id 用户id
     * @return 返回结果
     */
    ApiResult<String> delete(Long id);

    /**
     * 批量删除-这里也是逻辑删除
     *
     * @param idList 要删除的id
     * @return 返回结果
     */
    ApiResult<String> removeByIds(@RequestBody List<Long> idList);

    /**
     * 保存用户
     *
     * @param userVo 用户信息
     * @return 返回结果
     */
    ApiResult<String> saveUser(@RequestBody @Valid UserSaveVo userVo);

    /**
     * 编辑用户
     *
     * @param userVo 用户信息
     * @return 返回结果
     */
    ApiResult<String> updateUser(@RequestBody @Valid UserEditVO userVo);


}
